package TCPMain;

import androidx.recyclerview.widget.RecyclerView; // 导入 RecyclerView 类

import android.view.LayoutInflater; // 导入布局 inflator 服务类，用于实例化布局 XML 文件
import android.view.View; // 导入视图类
import android.view.ViewGroup; // 导入视图组类，作为视图的容器
import android.widget.TextView; // 导入文本视图类，用于显示文本

import com.example.tcp2504.R;

import org.json.JSONObject;

import java.util.ArrayList;
import java.util.List;

// 定义一个名为 TCPShowDataAdapter 的类，继承自 RecyclerView.Adapter，并指定其泛型为 TCPShowDataAdapter.ViewHolder
public class TCPShowDataAdapter extends RecyclerView.Adapter<TCPShowDataAdapter.ViewHolder> {
    private static List<String>mDataset=new ArrayList<>() ; // 声明一个字符串数组，用于存储要显示的数据
    private static OnItemClickListener listener;// 定义一个接口 OnItemClickListener，用于定义列表项点击事件的回调方法
    private static JSONObject AllData= TCPMain.AllData.getAllJsonData();// 声明一个 JSONObject 对象，用于存储所有数据

    /**
     * TCPShowDataAdapter 的构造函数
     */
    public TCPShowDataAdapter() {
        mDataset= TCPMain.AllData.getAllNames();
    }

    /**
     * 定义一个接口 OnItemClickListener，用于定义列表项点击事件的回调方法
     */
    public interface OnItemClickListener {
        /**
         * 定义列表项点击事件的回调方法
         * @param position: 列表项的位置
         */
        void onItemClick(int position);
    }

    /**
     * 外部类（调用类）使用该方法设置点击事件的处理逻辑
     * @param listener：OnItemClickListener 对象，用于定义列表项点击事件的回调方法
     */
    public void setOnItemClickListener(OnItemClickListener listener) {
        TCPShowDataAdapter.listener = listener;
    }


    /**
     * 定义一个静态内部类 ViewHolder，继承自 RecyclerView.ViewHolder
     * 用于表示列表项的视图
     */
    public static class ViewHolder extends RecyclerView.ViewHolder {
        public TextView textView; // 声明一个 TextView 对象，用于显示文本
        // 构造函数，接收一个 View 参数
        public ViewHolder(View v) {
            super(v); // 调用父类的构造函数
            textView = v.findViewById(R.id.file_list); // 在传入的视图中查找 ID 为 file_list 的 TextView，并赋值给 textView
            /**
             * 检查listener是否为空，若不为空则继续执行。
             * 获取当前视图在适配器中的位置position，确保位置有效（非RecyclerView.NO_POSITION）。
             * 调用listener.onItemClick方法，传入对应位置的数据项。
             */
            v.setOnClickListener(v1 -> {
                if (listener != null) {
                    int position = getAdapterPosition();
                    if (position != RecyclerView.NO_POSITION) {
                        listener.onItemClick(position);
                    }
                }
            });
        }

    }

    /**
     *重写 onCreateViewHolder 方法，用于创建新的列表项视图
     */
    @Override
    public TCPShowDataAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        // 获取 LayoutInflater 实例 用于将布局文件（XML 文件）动态地转换为对应的视图对象（View）。
        LayoutInflater inflater = LayoutInflater.from(parent.getContext());
        // 使用 LayoutInflater 将 item_layout 布局文件实例化为一个 View 对象
        View v = inflater.inflate(R.layout.tcp_show_data_layout, parent, false);
        // 返回一个新的 ViewHolder 对象，将创建的 View 传入其构造函数
        return new ViewHolder(v);
    }

    /**
     * 重写 onBindViewHolder 方法，用于将数据绑定到列表项视图
     * @param holder The ViewHolder which should be updated to represent the contents of the
     *        item at the given position in the data set.
     * @param position The position of the item within the adapter's data set.
     */
    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        // 获取当前 position 的数据，并将其设置到 ViewHolder 中的 TextView
        holder.textView.setText(mDataset.get(position));
    }

    /**
     * 重写 getItemCount 方法，返回数据集的大小
     * @return
     */
    @Override
    public int getItemCount() {
        if (mDataset == null){
            return 0;
        }else{
            return mDataset.size(); // 返回 mDataset 数组的长度
        }
    }
}